查看原文
其他

记一次基于Soket通信的app的分析

EASONs 看雪学院 2021-03-07

本文为看雪论坛优秀文章
看雪论坛作者ID:EASONs


1、App介绍


该App是一个股票数据查看软件,可以查看股票的交易数据,K线:
 




2、App分析


由于APP逻辑复杂故只列出有用部分。

2.1 MyApp->onCreate


APP经过加壳,脱壳后使用MT绕过签名效验重打包成功:
 
 
在自定义的Application的onCreate方法中进行一些数据的初始化:
 
 
读取配置文件中的配置:
 
 
解析assets文件夹中的MbUserMarket.xml文件存入mPBMarketArray和mHomeMenuMarkets。
 
 
解析文件pbtransclnt.xml存入CPDDataDecode的静态数组g_vDataPackage设置so库的DesKey:
 
 
读取main.cfg和hq_addr.ini文件中的服务端地址:
 


2.2 SplashActivity->onCreate

直接发送handlerMessage:
 
 
对应操作:
 
 
在initCodeTable()中尝试从文件中加载数据:
 
 
doLogin()进行登录请求:
 
 
然后将参数编码加密后调用addSendData方法:
 
 
编码方式为:将参数用|分隔然后在转换为字节数组。
 

 
加密方式根据参数确定是否DES加密,Zlib压缩,然后将发送的数据的信息存入前12位。
 
 
完成后将数据加入到GlobalNetConnect的NetSendThread。

如果是mHQPushNet则使用第二个端口:
 
 
然后启动NetSendThread线程(run方法代码较长只列出关键部分)
 
首先读取在mApp中加载的服务器地址读取后直接尝试连接,删除连接成功外的所有地址然后检查欲发送的数据是否合法。
 
 
上图 连接成功后将成功的地址记录:
 
 
然后将欲发送数据写入SendByteBuffer:
 
 
然后写入Socket:
 
 
再从Socket中读取回复:
 
 
回复的数据解密(也就是刚才分析的加密的逆过程)。

解析完成后如果设置了接受消息的Handler,则会发送消息:
 
 
登录成功后 请求MarketInfo,并根据第一次登录返回,用另一网络线程登录
(请求过程与登录过程类似 故不再诉)。
 
 
请求MarketInfo成功后 解析MarketInfo并请求CodleTable。
 
 
解析成功后记录数据,并保存为文件:
 


2.3 其它


其它的数据请求与上述过程类似,不再重复。


3、模拟客户获取数据


既然已经了解客户端与服务端的通信过程,则可以模拟客户端对服务器收发数据。
 
 
首先模仿App的编码加密过程将预发送的数据编码加密:
 
 
然后开启新线程将数据发送到服务端:
 
 
接收返回的数据并解析:
 
 
解析返回的数据并打印出来:
 
 
即可获取数据:
 



- End -





看雪ID:EASONs

https://bbs.pediy.com/user-821869.htm 

*这里由看雪论坛 EASONs 原创,转载请注明来自看雪社区。



推荐文章++++

*  KERNEL PWN状态切换原理及KPTI绕过

*  暴力爆破靶场搭建及爆破实验

*  短视频某手sig3算法调用

*  CVE-2018-0798及利用样本分析

*  Android逆向之一款有缘的apk 第一篇


好书推荐






公众号ID:ikanxue
官方微博:看雪安全
商务合作:wsc@kanxue.com



“阅读原文一起来充电吧!

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存